unit uSelecaoEmpresas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, JvExControls, JvXPCore, JvXPButtons, StdCtrls, JvExStdCtrls,
  JvCheckBox, ExtCtrls, JvExExtCtrls, JvExtComponent, JvPanel, CheckLst,
  JvgWizardHeader, db, dbtables, xmldom, XMLIntf, msxmldom, XMLDoc;

type
  TfrmSelecaoEmpresas = class(TForm)
    JvgWizardHeader1: TJvgWizardHeader;
    ListaEmp: TCheckListBox;
    JvPanel1: TJvPanel;
    JvPanel2: TJvPanel;
    ckListaEmpresas: TJvCheckBox;
    bOK: TJvXPButton;
    procedure FormActivate(Sender: TObject);
    procedure ckListaEmpresasClick(Sender: TObject);
    procedure bOKClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
    aBlnFecha: Boolean;
  public
    { Public declarations }
    AstrEmpresas: string;
  end;

var
  frmSelecaoEmpresas: TfrmSelecaoEmpresas;

implementation

uses clsEmpresa, clsParametros, Dm, Biblio, menu, clscontrolepadrao;

var
  Empresa: TEmpresa;
  Param_: TParametros;

{$R *.dfm}

procedure TfrmSelecaoEmpresas.FormActivate(Sender: TObject);
var
  tq: Tquery;
  _tot_empresa: Integer;
  Controle: TControlePadrao;
  bolAdd: Boolean;

  DOC: TXMLDocument;
  NodePai, NodeSec, NodeEmpr: IXMLNode;
  strEmpresasSelecionadas: string;
  blnSelecionaEmpresa: Boolean;
begin
  strEmpresasSelecionadas := '';
  AblnFecha := False;
  if (FileExists('acessoINT_' + frmMenu.usuario + '.xml')) then begin
    DOC := TXMLDocument.Create(frmMenu);
    DOC.LoadFromFile('acessoINT_' + frmMenu.usuario + '.xml');
    if DOC.DocumentElement.ChildNodes.FindNode('empresa') <> nil then
      blnSelecionaEmpresa := DOC.DocumentElement.ChildNodes.FindNode('empresa').Attributes['selecao'] = 'SIM';

    if blnSelecionaEmpresa then begin
      NodePai := Doc.DocumentElement.childNodes.FindNode('empresa').ChildNodes.FindNode('id');
      NodeSec := NodePai;
      if NodeSec <> nil then begin
        NodeSec.ChildNodes.First;
        repeat
          if strEmpresasSelecionadas = '' then
            strEmpresasSelecionadas := strEmpresasSelecionadas + QuotedStr(NodeSec.ChildNodes['emp_codigo'].text)
          else
            strEmpresasSelecionadas := strEmpresasSelecionadas + ',' + QuotedStr(NodeSec.ChildNodes['emp_codigo'].text);
          NodePai := NodePai.NextSibling;
          NodeSec := NodeSec.NextSibling;
        until NodePai = nil;
      end;

    end;

    FreeAndNil(DOC);
  end;

  tq := Tquery.create(dmint);
  tq.databasename := dm.dmint.db.databasename;
  tq.active := False;
  ListaEmp.Items.Clear;
  Empresa := TEmpresa.Create;
  Empresa.Consultar(tq, ' ');
  Empresa.Free;
  tq.open;
  _tot_empresa := 0;
  Param_ := TParametros.Create;
  Param_.Recuperar('1');
  Controle := TControlePadrao.Create;
  while not tq.eof do begin
    if WbolUsuario1 then begin
      bolAdd := True;
    end else begin
      bolAdd := Controle.Recuperar(tq.fieldbyname('Emp_Codigo').asstring);
    end;

    if bolAdd then begin
      if Trim(strEmpresasSelecionadas) <> '' then begin
        bolAdd := pos(tq.fieldbyname('Emp_Codigo').asstring, strEmpresasSelecionadas) > 0;
      end;
    end;

    if bolAdd then begin
      ListaEmp.Items.Add(tq.fieldbyname('Emp_Codigo').asstring + '-' + tq.fieldbyname('Emp_Razao').asstring);
      ListaEmp.Checked[_tot_empresa] := True;
      ckListaEmpresas.Checked := True;
      _tot_empresa := _tot_empresa + 1;
    end;
    tq.next;
  end;
  Controle.Free;

  tq.close;
  tq.free;
  Param_.Free;

  ckListaEmpresas.Checked := True;
  ckListaEmpresasClick(Sender);
  bOK.SetFocus;
end;

procedure TfrmSelecaoEmpresas.ckListaEmpresasClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to ListaEmp.Items.Count - 1 do begin
    ListaEmp.Checked[i] := ckListaEmpresas.Checked;
  end;
end;

procedure TfrmSelecaoEmpresas.bOKClick(Sender: TObject);
var
  c, i: Integer;

begin
  c := 0;
  for i := 0 to ListaEmp.Items.Count - 1 do begin
    if ListaEmp.Checked[i] then
      inc(c);
  end;
  if c > 0 then begin
    AblnFecha := True;
    Close;
  end else begin
    AblnFecha := False;
    Showmessage('Selecione ao menos uma empresa!');
    ListaEmp.SetFocus;
  end;
end;

procedure TfrmSelecaoEmpresas.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  AstrEmpresas := RecuperaSequenciaDaCheckList(ListaEmp, 3);
  WstrListadeEmpresas := Trim(AstrEmpresas);
end;

procedure TfrmSelecaoEmpresas.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  CanClose := AblnFecha;
end;

end.

